; division routine
; 1. calculate flag if result is negate and convert operands to positiv
; 2. second "divide" with unsigned suczessive Approximation  
; 3. fix the sign of result 

       .MACRO INTdivide_mac

  STR %2,\arg2save
  STR %3,\arg3save

  MOV tempregister,#0
  CMP %2,#0
   RSBLT %2,%2,#0
   SUBLT tempregister,tempregister,#1
  CMP %3,#0
   RSBLT %3,%3,#0
   MVNLT tempregister,tempregister
 STR tempregister,\sign 

  MOV  tempregister,#0

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         

  ADDS %2,%2,%2
  ADCS tempregister,tempregister,tempregister
  CMP  tempregister,%3
  SUBGE  tempregister,tempregister,%3
  ADDGE  %2,%2,#1         
   
  LDR tempregister,\sign 
  CMP tempregister,#0
  RSBNE %2,%2,#0 
  MOV tempregister,%2
  LDR %2,\arg2save
  LDR %3,\arg3save
  MOV %1,tempregister

 GO \hupf
\arg2save .WORD 0
\arg3save .WORD 0
\sign     .WORD 0
\hupf

 .ENDM 
